// UserModel.h
// Created by Limou on 24-8-13.
// 本数据类描述了一个用户模型
// 构造方法只能构造一个属性为空的模型对象
// makexxx() 携带多个参数构造一个属性非空的模型对象, 部分属性可以自动生成, 但是其他属性需要强制设置
// setxxx() 设置模型对象内部属性
// getxxx() 获取模型对象内部属性

#ifndef FRONTEND_USERMODEL_HPP
#define FRONTEND_USERMODEL_HPP

#include <QString>
#include <QIcon>
#include "../common/Common.hpp"

// >>> class UserModel begin: 用户模型 >>>
namespace chat_system::model {
    class UserModel {
    private: // TODO: 可以该下命名规则
        QString userId_; // 唯一标识
        QString userNickName_; // 用户昵称
        QString userPhoneNumber_; // 电话
        QString userPersonalSignature_; // 签名
        QIcon userAvatarIco_; // 头像

    public:
        // 构造方法
        UserModel()
        : userId_("")
        , userNickName_("")
        , userPhoneNumber_("")
        , userPersonalSignature_("")
        , userAvatarIco_(QIcon())
        {}

        // 工厂方法
        static UserModel makeUser(
            const QString& userNickName,
            const QString& userPhoneNumber,
            const QString& userPersonalSignature,
            const QIcon& userAvatarIco,
            const QString& userId = common::Tools::getInstance()->getUuid("U")
        ) {
            auto user = UserModel();

            user.setUserId(userId);
            user.setUserNickName(userNickName);
            user.setUserPhoneNumber(userPhoneNumber);
            user.setUserPersonalSignature(userPersonalSignature);
            user.setUserAvatarIco(userAvatarIco);

            return user;
        }

        // 设置和获取
        const QString& getUserId() const { return userId_; }
        void setUserId(const QString& userId) { userId_ = userId; }

        const QString& getUserNickName() const { return userNickName_; }
        void setUserNickName(const QString& userNickName) { userNickName_ = userNickName; }

        const QString& getUserPhoneNumber() const { return userPhoneNumber_; }
        void setUserPhoneNumber(const QString& userPhoneNumber) { userPhoneNumber_ = userPhoneNumber_; }

        const QString& getUserPersonalSignature() const { return userPersonalSignature_; }
        void setUserPersonalSignature(const QString& userPersonalSignature) { userPersonalSignature_ = userPersonalSignature; }

        const QIcon& getUserAvatarIco() const { return userAvatarIco_; }
        void setUserAvatarIco(const QIcon& userAvatarIco) { userAvatarIco_ = userAvatarIco; }
    };
} // namespace chat_system::model end
// <<< class UserModel end <<<

#endif // FRONTEND_USERMODEL_HPP
